package com.crm.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.crm.entity.Module;
import com.crm.service.ModuleService;


@RestController
@RequestMapping("/demo")
public class ModuleDemoController {
	@Autowired
	private ModuleService moduleService;
	    @GetMapping
		public Object ModuleTree() {
	  
	    	//封装成Tree要的数据
	    	List<Map<String,Object>> list = new ArrayList<>();
	    	//模块全部数据
	        List<Module> All=moduleService.GetAll();
	    	for (Module p : All) {
			
			if(p.getParentId()==null) {//判断是否是父节点
				Map<String,Object> map =new HashMap<>();
				map.put("title", p.getModuleName());
				map.put("id", p.getModuleId());
				//节点路径
				//map.put("path", p.getPath());
				//节点权重
				map.put("weight", p.getModuleWeight());
				//传一个父节点的id, 方便js判断
				map.put("parentid", 1);
				//map.put("spread", true);//是否直接展开
				//子节点,遍历循环 递归
				map.put("children", getChildren(p,All));
				list.add(map);
			}
		   
			}
			return list;
		}
	    public List<Object> getChildren(Module p,List<Module> module){
	    	//用list集合封装children的对象数组
	        List<Object> list = new ArrayList<>();
	       
	            for (Module d : module) {
	            	//判断子节点是否属于相应的父节点
	            if(p.getModuleId().equals(d.getParentId())) {
	            	
	            	//判断有没有子节点,没有子节点的话就是父节点
	            	if(p.getChildren()==null) {
	             	   p.setChildren(new ArrayList<Module>());
	             	}
	            	//创建Map集合 必须放这个位置,每次符合条件都要创建,不然的话加载的数据只有最后一个
	            	 Map<String,Object> map =new HashMap<>();
	            	//子节点的title数据
	            	map.put("title", d.getModuleName());
	            	//把子节点的id传到树里面
	            	map.put("id", d.getModuleId());
	            	//方便在添加的时候判断是不是在子节点下添加
	            	map.put("pan", 2);
	            	//节点路径
					map.put("c", d.getModuleUrl());
					//节点权重
					map.put("weight", d.getModuleWeight());
	            	//子节点children的对象数组
	            	map.put("children", getChildren(d, module));
	            	list.add(map);
	            }
	        
	        }
	        return list;
	    }
	    @PostMapping
	    public String AddModule(Module module) {
	  	  return moduleService.AddAndUpdateModule(module);
	    }
	    @DeleteMapping
	    public String DeleteModule(Integer id) {
	  	  return moduleService.DeleteModuleById(id);
	    }
	    @PutMapping
	    public Integer UpdateModule(String moduleName,String moduleUrl,Integer moduleWeight,Integer moduleId) {
	    	
	  	  return moduleService.updateTree(moduleName, moduleUrl,moduleWeight,moduleId);
	    }
}
